package com.saydc.actions.usuarios;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.saydc.beans.Perfil;
import com.saydc.beans.Usuario;
import com.saydc.dao.BeansDAO;
import com.saydc.dao.UsuariosDAO;
import com.saydc.exceptions.UnableToDeleteException;
import com.saydc.forms.usuarios.ActualizaUsuarioForm;

public class AccionUsuariosAction extends DispatchAction {
	
	public ActionForward alta(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		BeansDAO dao = BeansDAO.getInstance();
		List<Perfil> listaPerfiles = dao.getAllTipoPerfiles(); 
		request.getSession().setAttribute("listaPerfiles", listaPerfiles);
		return mapping.findForward("altaUsuario");
	}
	
	@SuppressWarnings("unchecked")
	public ActionForward editar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		ArrayList<Usuario> listaUsuarios = (ArrayList<Usuario>)request.getSession().getAttribute("listaUsuarios");
		String indexUnidad = request.getParameter("index");
		Usuario usuario = listaUsuarios.get(Integer.parseInt(indexUnidad));
		request.getSession().setAttribute("usuario", usuario);
		BeansDAO dao = BeansDAO.getInstance();
		List<Perfil> listaPerfiles = dao.getAllTipoPerfiles(); 
		request.getSession().setAttribute("listaPerfiles", listaPerfiles);
		return mapping.findForward("editarUsuario");
	}
	
	@SuppressWarnings("unchecked")
	public ActionForward borrar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response){
		
		ArrayList<Usuario> listaUsuarios = (ArrayList<Usuario>)request.getSession().getAttribute("listaUsuarios");
		String indexUnidad = request.getParameter("index");
		Usuario usuario = listaUsuarios.get(Integer.parseInt(indexUnidad));
		UsuariosDAO dao = UsuariosDAO.getInstance();
		try{
			dao.borrarUsuario(usuario);
		}catch(UnableToDeleteException e){
			return mapping.findForward("failure");
		}
		return mapping.findForward("success");
	}
	
	public ActionForward confirmaEditar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		Usuario usuario = (Usuario)request.getSession().getAttribute("usuario");
		ActualizaUsuarioForm usuarioForm = (ActualizaUsuarioForm)form;
		usuario.setContrasenia(usuarioForm.getContrasenia());
		usuario.setPerfil(Perfil.getTipoPerfil(usuarioForm.getIdPerfil()));
		UsuariosDAO dao = UsuariosDAO.getInstance();
		dao.actualizarUsuario(usuario);
		return mapping.findForward("success");
	}

}
